import src.FileListPanel;
import src.FileOperations;
import src.PreviewPanel;

import javax.swing.*;
import java.awt.*;

public class MainApp {
    public static void main(String[] args) {
        // 确保GUI操作在事件调度线程上执行
        SwingUtilities.invokeLater(() -> {
            // 创建主窗口框架
            JFrame frame = new JFrame("File Viewer");
            // 设置默认关闭操作为退出程序
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            // 设置窗口大小
            frame.setSize(1200, 800);
            // 设置布局管理器为BorderLayout
            frame.setLayout(new BorderLayout());

            // 创建文件列表面板
            FileListPanel fileListPanel = new FileListPanel();
            // 创建预览面板，并将文件列表面板作为参数传递
            PreviewPanel previewPanel = new PreviewPanel(fileListPanel);

            // 创建一个包含文件路径和按钮的面板
            JPanel filePathPanel = new JPanel(new BorderLayout());
            // 创建一个不可编辑的文本字段用于显示当前选中的文件路径
            JTextField filePathField = new JTextField();
            filePathField.setEditable(false);
            filePathField.setText(fileListPanel.getSelectedFilePath());
            // 将文本字段设置到文件列表面板中
            fileListPanel.setFilePathField(filePathField);

            // 创建一个包含操作按钮的面板
            JPanel buttonPanel = new JPanel();
            // 创建刷新按钮并添加动作监听器
            JButton refreshButton = new JButton("Refresh");
            refreshButton.addActionListener(e -> fileListPanel.refreshFileList());
            // 创建复制按钮并添加动作监听器
            JButton copyButton = new JButton("Copy");
            copyButton.addActionListener(e -> FileOperations.copyFileOrDirectory(fileListPanel.getSelectedFile()));
            // 创建粘贴按钮并添加动作监听器
            JButton pasteButton = new JButton("Paste");
            pasteButton.addActionListener(e -> FileOperations.pasteFileOrDirectory(previewPanel.getCurrentDirectory(), fileListPanel));
            // 创建删除按钮并添加动作监听器
            JButton deleteButton = new JButton("Delete");
            deleteButton.addActionListener(e -> FileOperations.deleteFileOrDirectory(fileListPanel.getSelectedFile(), fileListPanel));
            // 创建重命名按钮并添加动作监听器
            JButton renameButton = new JButton("Rename");
            renameButton.addActionListener(e -> fileListPanel.renameFile());

            // 将按钮添加到按钮面板中
            buttonPanel.add(refreshButton);
            buttonPanel.add(copyButton);
            buttonPanel.add(pasteButton);
            buttonPanel.add(deleteButton);
            buttonPanel.add(renameButton);
            // 将文件路径字段和按钮面板添加到文件路径面板中
            filePathPanel.add(filePathField, BorderLayout.CENTER);
            filePathPanel.add(buttonPanel, BorderLayout.EAST);

            // 创建一个主要的面板来组织其他面板
            JPanel mainPanel = new JPanel(new BorderLayout());
            // 将文件列表面板放置在左侧
            mainPanel.add(fileListPanel, BorderLayout.WEST);
            // 将文件路径面板放置在顶部
            mainPanel.add(filePathPanel, BorderLayout.NORTH);
            // 将预览面板放置在中心
            mainPanel.add(previewPanel, BorderLayout.CENTER);

            // 将主要面板添加到主窗口框架中
            frame.add(mainPanel, BorderLayout.CENTER);
            // 显示主窗口框架
            frame.setVisible(true);
        });
    }
}